МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
ІКТА
кафедра ЗІ
Графічно-розрахункова робота
з курсу «Програмування комп’ютерної графіки»
Мета роботи - набути практичних навиків в складанні програм для побудови зображень на екрані комп’ютера за допомогою засобів мови С# та бібліотеки OpenGL.
Короткі теоретичні відомості.
OPENGL обчислює колір кожного пікселя в результуючій, сцені, що відображується, міститься в буфері кадру. Частка цього розрахунку залежить від того, яке освітлення використовується в сцені, і як об'єкти сцени відображають і поглинають світло. Як приклад цьому пригадаєте, що океан (або море, або річка – взагалі кажучи, будь-яке водоймище) має різний колір в сонячний або в хмарний день. Присутність світла або хмар визначає, чи буде вода виглядати яскраво сині або брудно зеленою. По правді кажучи, більшість об'єктів взагалі не виглядають тривимірними, якщо вони не освітлені. Скажімо, неосвітлена сфера нічим не відрізняється від двовимірного круга. Освітлення будь-якого об'єкту залежить від двох чинників. Перший - це матеріал, з якого зроблений об'єкт. Другий - це світло, яким він освітлений.
Завдання
Для виконання завдання необхідно створити відповідно до варіанту сцену (фотореалістичність не потрібна). Оцінка, виставляється за завдання, залежить від виконання сцени, і використаних в ній засобів. Максимальна оцінка 30 балів.
30.
Космічна станція
Текст програми
using System;
using System.Collections.Generic;
using Tao.FreeGlut;
using OpenGL;
namespace ROZRAHA_SVIAT
{
class Program
{
private static int width = 1280, height = 720;
private static System.Diagnostics.Stopwatch watch;
private static ShaderProgram program;
private static VBO<Vector3> cube, cubeNormals, cubeTangents, square, square2, square3, square4, square5, square6;
private static VBO<Vector2> cubeUV;
private static VBO<int> cubeTriangles, squareElements, squareElements2, squareElements3, squareElements4, squareElements5, squareElements6;
private static Texture brickDiffuse, brickNormals, background;
private static bool lighting = true, fullscreen = false, normalMapping = false ,alpha = false;
private static bool left, right, up, down, space;
private static Camera camera;
private static BMFont font;
private static ShaderProgram fontProgram;
private static FontVAO information;
static void Main(string[] args)
{
Glut.glutInit();
Glut.glutInitDisplayMode(Glut.GLUT_DOUBLE | Glut.GLUT_DEPTH | Glut.GLUT_MULTISAMPLE);
Glut.glutInitWindowSize(width, height);
Glut.glutCreateWindow("Rozrahunkova_robota");
Glut.glutIdleFunc(OnRenderFrame);
Glut.glutDisplayFunc(OnDisplay);
Glut.glutKeyboardFunc(OnKeyboardDown);
Glut.glutKeyboardUpFunc(OnKeyboardUp);
Glut.glutCloseFunc(OnClose);
Glut.glutReshapeFunc(OnReshape);
Glut.glutMouseFunc(OnMouse);
Glut.glutMotionFunc(OnMove);
Gl.Enable(EnableCap.Blend);
Gl.Enable(EnableCap.DepthTest);
program = new ShaderProgram(VertexShader, FragmentShader);
// Створення камери
camera = new Camera(new Vector3(0, 0, 10), Quaternion.Identity);
camera.SetDirection(new Vector3(0, 0, -1));
program.Use();
program["projection_matrix"].SetValue(Matrix4.CreatePerspectiveFieldOfView(0.45f, (float)width / height, 0.1f, 1000f));
//program["view_matrix"].SetValue(Matrix4.LookAt(new Vector3(0, 0, 10), Vector3.Zero, Vector3.Up));
program["light_direction"].SetValue(new Vector3(0, 0, 1));
program["enable_lighting"].SetValue(lighting);
program["normalTexture"].SetValue(1);
program["enable_mapping"].SetValue(normalMapping);
brickDiffuse = new Texture...